package com.briup.day15;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

public class GenericTest {

    public static void main(String[] args) {
        Integer i = test(123);
        String s = test("123");

        Number apply = apply("123");

        // 设置泛型的下边界，在使用泛型时
        ArrayList<? super Number> numbers = new ArrayList<>();

        // 传参给test2()方法
        List<Integer> objects = new ArrayList<>();
        // Integer是Object类的子类，
        // 但是List<Integer>不是List<Object>的子类
        test2(objects);
    }

    // 泛型方法<T>放在返回值之前
    private static <T> T test(T t) {
        return t;
    }

    // 在定义泛型时，设定泛型的边界，如泛型上界
    private static <R extends Number, T> R apply(T t) {
        Function<T, R> f = (t2) -> {
            return null;
        };
        return f.apply(t);
    }

    // 在泛型中?是一个通配符，表示接收所有的参数，等同于Object
    private static void test2(List<?> list) {

    }
}
